﻿using System;
using System.Data.SqlServerCe;

namespace GestionaleLib.Controller
{
    public class Connector : IDisposable
    {
        private static Connector session;

        public static Connector Istance()
        {
            if (session == null)
                session = new Connector();
            return session;
        }

        public SqlCeConnection Connessione { get; private set; }

        private bool disposed = false;

        private Connector()
        {
            ApriConnessione();
        }

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }

        protected virtual void Dispose(bool disposing)
        {
            if (!this.disposed)
            {
                if (disposing)
                {
                    ChiudiConnessione();
                    session = null;
                }
                disposed = true;
            }
        }

        ~Connector()
        {
            Dispose(false);
        }

        private void ApriConnessione()
        {
            //Verifica se il database ha bisogno di essere aggiornato alla versione 4
            SqlCeEngine engine = new SqlCeEngine(GestionaleLib.Properties.Settings.Default.Connessione);
            Connessione = new SqlCeConnection(GestionaleLib.Properties.Settings.Default.Connessione);
            try
            {
                Connessione.Open();
            }
            catch
            {
                engine.Upgrade();
            }
        }

        private void ChiudiConnessione()
        {
            try
            {
                Connessione.Close();
            }
            catch (SqlCeException)
            {
                return;
            }
        }
    }
}